import numpy as np

def demonstrate_numpy_math_functions():
    """
    NumPy数学函数演示脚本
    包含菜鸟教程链接中的所有数学函数知识点
    """
    
    print("=== NumPy数学函数演示 ===\n")
    
    # 1. 三角函数演示
    print("1. 三角函数 - sin(), cos(), tan()")
    print("=" * 50)
    
    # 创建角度数组
    angles = np.array([0, 30, 45, 60, 90])
    print(f"角度数组: {angles}")
    
    # 转换为弧度
    radians = angles * np.pi / 180
    print(f"转换为弧度: {radians}")
    
    # 正弦函数
    print("\n正弦值:")
    sin_values = np.sin(radians)
    print(f"np.sin(angles * np.pi/180) = {sin_values}")
    
    # 余弦函数
    print("\n余弦值:")
    cos_values = np.cos(radians)
    print(f"np.cos(angles * np.pi/180) = {cos_values}")
    
    # 正切函数
    print("\n正切值:")
    tan_values = np.tan(radians)
    print(f"np.tan(angles * np.pi/180) = {tan_values}")
    
    # 2. 反三角函数演示
    print("\n2. 反三角函数 - arcsin(), arccos(), arctan()")
    print("=" * 50)
    
    # 反正弦函数
    print("\n反正弦计算:")
    arcsin_values = np.arcsin(sin_values)
    print(f"np.arcsin(sin_values) = {arcsin_values} (弧度)")
    
    # 弧度转角度
    arcsin_degrees = np.degrees(arcsin_values)
    print(f"np.degrees(arcsin_values) = {arcsin_degrees} (角度)")
    
    # 反余弦函数
    print("\n反余弦计算:")
    arccos_values = np.arccos(cos_values)
    print(f"np.arccos(cos_values) = {arccos_values} (弧度)")
    
    arccos_degrees = np.degrees(arccos_values)
    print(f"np.degrees(arccos_values) = {arccos_degrees} (角度)")
    
    # 反正切函数
    print("\n反正切计算:")
    arctan_values = np.arctan(tan_values)
    print(f"np.arctan(tan_values) = {arctan_values} (弧度)")
    
    arctan_degrees = np.degrees(arctan_values)
    print(f"np.degrees(arctan_values) = {arctan_degrees} (角度)")
    
    # 3. 舍入函数演示
    print("\n3. 舍入函数 - around(), floor(), ceil()")
    print("=" * 50)
    
    # 创建测试数组
    test_array = np.array([1.0, 5.55, 123, 0.567, 25.532])
    print(f"测试数组: {test_array}")
    
    # numpy.around() - 四舍五入
    print("\n四舍五入函数 around():")
    print(f"np.around(test_array) = {np.around(test_array)}")
    print(f"np.around(test_array, decimals=1) = {np.around(test_array, decimals=1)}")
    print(f"np.around(test_array, decimals=-1) = {np.around(test_array, decimals=-1)}")
    
    # numpy.floor() - 向下取整
    print("\n向下取整函数 floor():")
    floor_test = np.array([-1.7, 1.5, -0.2, 0.6, 10])
    print(f"测试数组: {floor_test}")
    print(f"np.floor(floor_test) = {np.floor(floor_test)}")
    
    # numpy.ceil() - 向上取整
    print("\n向上取整函数 ceil():")
    ceil_test = np.array([-1.7, 1.5, -0.2, 0.6, 10])
    print(f"测试数组: {ceil_test}")
    print(f"np.ceil(ceil_test) = {np.ceil(ceil_test)}")
    
    # 4. 补充：其他常用数学函数
    print("\n4. 其他常用数学函数")
    print("=" * 50)
    
    # 幂函数和指数函数
    print("\n幂函数和指数函数:")
    arr = np.array([1, 2, 3, 4])
    print(f"数组: {arr}")
    print(f"平方: np.power(arr, 2) = {np.power(arr, 2)}")
    print(f"指数: np.exp(arr) = {np.exp(arr)}")
    
    # 对数函数
    print("\n对数函数:")
    print(f"自然对数: np.log(arr) = {np.log(arr)}")
    print(f"以10为底对数: np.log10(arr) = {np.log10(arr)}")
    
    # 统计函数
    print("\n统计函数:")
    stat_arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    print(f"数组: {stat_arr}")
    print(f"求和: np.sum(stat_arr) = {np.sum(stat_arr)}")
    print(f"平均值: np.mean(stat_arr) = {np.mean(stat_arr)}")
    print(f"标准差: np.std(stat_arr) = {np.std(stat_arr)}")
    
    # 绝对值函数
    print("\n绝对值函数:")
    abs_arr = np.array([-1, -2, 3, -4, 5])
    print(f"数组: {abs_arr}")
    print(f"绝对值: np.abs(abs_arr) = {np.abs(abs_arr)}")
    
    print("\n=== 演示结束 ===")

def demonstrate_advanced_math_functions():
    """
    高级数学函数演示（补充内容）
    """
    print("\n" + "="*60)
    print("高级数学函数补充演示")
    print("="*60)
    
    # 双曲函数
    print("\n双曲函数:")
    x = np.array([0, 0.5, 1.0])
    print(f"双曲正弦: np.sinh({x}) = {np.sinh(x)}")
    print(f"双曲余弦: np.cosh({x}) = {np.cosh(x)}")
    print(f"双曲正切: np.tanh({x}) = {np.tanh(x)}")
    
    # 反双曲函数
    print("\n反双曲函数:")
    print(f"反双曲正弦: np.arcsinh({x}) = {np.arcsinh(x)}")
    print(f"反双曲余弦: np.arccosh({x + 1}) = {np.arccosh(x + 1)}")  # 注意定义域
    
    # 比较函数
    print("\n比较函数:")
    a = np.array([1, 2, 3])
    b = np.array([3, 2, 1])
    print(f"数组a: {a}, 数组b: {b}")
    print(f"最大值: np.maximum(a, b) = {np.maximum(a, b)}")
    print(f"最小值: np.minimum(a, b) = {np.minimum(a, b)}")

if __name__ == "__main__":
    demonstrate_numpy_math_functions()
    demonstrate_advanced_math_functions()